스택 오버플로
보이기
다른 뜻에 대해서는 스택 오버플로 (동음이의) 문서를 참고하십시오.
소프트웨어에서 스택 오버플로(영어: stack overflow)는 스택 포인터가 스택의 경계를 넘어설 때 일어난다. 호출 스택은 제한된 양의 주소 공간을 이루며 대개 프로그램 시작 시 결정된다.
프로그램이 호출 스택에서 이용 가능한 공간 이상을 사용하려고 시도할 때 또는 지정된 시스템 메모리 사이즈보다 과다한 스택 메모리를 사용할 때 스택 오버플로(overflow)가 발생하며 이 경우 일반적으로 데이터 유실 등 '에러 발생'이 수반된다.[1]
무한 반복
[편집]스택 오버플로의 가장 흔한 원인은 무한 루프에 빠진 재귀 호출이다. 테일 콜 최적화 기능이 있는 스킴과 같은 언어들은 스택 오버플로 없이 특정한 정렬인 테일 반복으로 무한 반복을 일으키게 한다. 이는 테일 콜이 추가적인 스택 공간을 차지하지 않기 때문에 가능하다.[2]
C의 무한 루프의 예는 다음과 같다.
int foo() {
return foo();
}
foo 함수가 발생되면 자신을 호출하여 스택 오버플로가 일어날 때까지 매번 스택에 추가 공간을 사용하며 결국 세그멘테이션 오류가 발생한다.[3]
같이 보기
[편집]참조
[편집]- ↑ Burley, James Craig (1991년 6월 1일). “Using and Porting GNU Fortran”. 2012년 10월 5일에 원본 문서에서 보존된 문서. 2016년 11월 25일에 확인함.
- ↑ “An Introduction to Scheme and its Implementation”. 1997년 2월 19일. 2007년 8월 10일에 원본 문서에서 보존된 문서. 2007년 8월 14일에 확인함.
- ↑ What is the difference between a segmentation fault and a stack overflow? at StackOverflow